home *** CD-ROM | disk | FTP | other *** search
-
- BASED ON THE LATEST VERSION - RELEASE.3 - AUDIOTOOLS BY ROB PECK
- ****************************************************************
- Adaptation for M2Amiga Modula-2 by Anthony Bryant 9/4/88
-
- AudioTools is a collection of simple-to-use audio routines, that enable the
- user to queue up several sounds and have the audio device play them,
- sequentially, while your program continues doing what it was doing, without
- going directly to the hardware.
-
- This provides the capability to synchronize graphics and sound. Now when you
- InitAudio() - initialize the AudioTools - a return value must be saved so that
- it can be used later to FinishAudio(), as well as passed with the function
- procedure named MayGetNote(). You can identify a note by number, an id, using
- PlayNote(), PlayFreq() or PlaySamp(), then tell MayGetNote() whether you want
- to get a return immediately, if there is no identified note available to be
- gotten, or if you want your task to wait until there is something to be
- returned. Additional procedures simplify operations on individual channels.
-
- The AudioTools module has the appearance of a normal library module consisting
- of a symbol file (sym/AudioTools.sym) and an object file (obj/Audiotools.obj)
- from which you can IMPORT the following procedures.
-
- The procedures:
-
- port:= InitAudio(); initialize the audio routines, get a port
- for receiving messages from audio routines
-
- chan:= GetChannel(type); request a channel to use.
-
- error:= FreeChannel(chan); free a channel that you have been given.
-
- FinishAudio(port); end the use of audio routines and return
- the port you received from audio routines
- and free up allocated CHIP RAM.
-
- error:= StopChannel(chan); temporarily halt a channel you own.
- error:= StartChannel(chan); start your channel up again.
- error:= FlushChannel(chan); empty the queue of a channel from any notes
- it is playing or is going to play.
- error:= ResetChannel(chan); reset a channel
-
- error:= IsThatMyChan(chan); see if your task still owns a particular
- channel (audio system allows stealing of
- channels if the are not locked at a high
- enough priority).
- flag:= CheckIfDone(); check if all notes are finished playing.
-
- id:= MayGetNote(port, flag); see if a note you marked has begun to play.
- possibly put task to sleep if flag = TRUE
- good for synchronizing graphics and sound.
-
- error:= SetPV(channel,per,vol); set the period and/or volume of a channel
- that is already playing a waveform.
-
- error:= SetWave(chan,waveArray); set up waveform, an ARRAY [0..255] OF BYTE,
- in CHIP RAM to play on specific channel.
-
- error:= SetSamp(chan,sample,length); copy sample data BYTES to CHIP RAM
- to play on specific channel .. unless..
- if length = 0 then just free up previous sample
- if sample (ADDRESS) = 0 then return new value
- in VAR sample - without copying data.
-
- PlayNote( ... parameters ...) queue up a specific note number to be played
- by one of your channels.
- PlayFreq( ... parameters ...) queue up a specific frequency instead of note.
-
- PlaySamp( ... parameters ...) queue up a sample to play instead of note.
-
- where ( ... parameters ...) =
- (channel,note/freq/per,volume,duration,priority,messageport,id)
-
- (See DEFINITION MODULE (AudioTools.def) for parameter types and specifics)
-
- The error conditions:
-
- InitAudio() returns a NIL pointer if OpenDevice() or CreatePort() failed.
-
- GetChannel() normally returns specific channel number 0,1,2 or 3 UNLESS
- returns (notYourChannel) if channel already busy
- returns (badChannelSelected) if unit failed to be assigned
- returns -10 ADIOERR_NOALLOCATION if WaitIO() failed
-
- IsThatMyChan() normally returns 0 if valid channel you own UNLESS
- returns (badChannelSelected) if chan not 0,1,2 or 3
- returns (notYourChannel) if channel already busy
-
- other Channel procedures and also SetPV() procedure
- returns same as IsThatMyChan() errors and also
- returns -10 ADIOERR_NOALLOCATION if WaitIO() failed
-
- IF (CheckIfDone() = FALSE) THEN notes not finished playing
- IF (CheckIfDOne() = TRUE ) THEN o.k. all finished
-
- SetWave() normally returns 0 if everything went o.k. UNLESS
- returns same as IsThatMyChan() errors and also
- returns (outOfMemory) if AllocMem() failed
-
- SetSamp() same as SetWave()
-
- (See IMPLEMENTATION MODULE (AudioTools.imp) for the complete source code. )
-
- Using the AudioTools routines:
-
- FROM AudioTools IMPORT
-
- PROGRAM MODULE (AudioDemo.mod) contains the complete source to a simple demo
- showing the usage for each of the many commands that make AudioTools easy to
- use. AudioDemo is the executable file.
-
- -------------------------------------------------------------------------------
- The C source for AudioTools was kindly placed into the public domain by
-
- Rob Peck, thanks Rob! This M2Amiga Modula-2 adaptation, source, symbol and
-
- object library module files, including demo is also now in the public domain.
-
- Audiotools is being revised, so this adaptation is based on RELEASE.3, the
-
- latest (and greatest) version. In the fullness of time, it is to be hoped,
-
- AudioTools will become a shared library (loadable from disk), but in the
-
- meantime I will try to keep this M2 directory up-to-date with the latest
-
- Release from Rob.
-
- Anthony Bryant 9/4/88
- -----------------------------------------------------------------------------
-
-